#pragma once

#include <memory>
#include <vector>
#include <string>
#include <Eigen/Core>

class RegionTracker {
public:

	float learning_rate_b_;
	float learning_rate_f_;
	std::vector<float> standard_deviations_{ 15.0f, 5.0f, 3.5f, 1.5f };
};

class RegionTrackerBuilder {
public:
	RegionTrackerBuilder() {
		tracker_ptr = std::make_shared<RegionTracker>();
	}
	
	std::shared_ptr<RegionTracker> Build() {
		return tracker_ptr;
	}

	RegionTrackerBuilder& 
	learning_rate_f(float value) {
		tracker_ptr->learning_rate_f_ = value;
		return *this;
	}

	RegionTrackerBuilder& 
	learning_rate_b(float value) {
		tracker_ptr->learning_rate_b_ = value;
		return *this;
	}
	
	RegionTrackerBuilder& 
	standard_deviations(const std::vector<float>& value) {
		tracker_ptr->standard_deviations_ = value;
		return *this;
	}

	std::shared_ptr<RegionTracker> tracker_ptr;
};